home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
comm2
/
kms20src.lha
/
KMSC
/
kmsconv.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-04-02
|
10KB
|
293 lines
/**
** KMSConv.c
**
** Converts KMS_UAF.DAT or KMS_AREAS.DAT from old into new format.
**
** © Copyright 1994 Thomas Schwarz, Germany
** All Rights Reserved.
**/
// Includes
#include <KMS/KMS.h>
// Defines
#define USAGE "KMSConv 1.1 -*- KMS Data Converter -*- (c)1994 Thomas Schwarz\n\n" \
"USAGE:\n" \
"%s -u <oldfile> <newfile>\n" \
"Converts KMS_UAF.DAT of KMS V1.75b into format of V1.80b.\n\n" \
"%s -a <oldfile> <newfile>\n" \
"Converts KMS_AREAS.DAT of KMS V1.80b into format of V1.81b.\n\n"
// Prototypes
UWORD MyBreak(VOID);
VOID main(UWORD, STRPTR *);
// Declarations
/* V1.75b Userdaten-Struktur */
struct AltUserdaten
{
UWORD ID;
TEXT Name[LEN_USERNAME+1];
TEXT RealName[LEN_REALNAME+1];
TEXT Street[LEN_STREET+1];
TEXT City[LEN_CITY+1];
TEXT Phone[LEN_PHONE+1];
TEXT Prompt[LEN_UPROMPT+1];
UWORD Level;
UWORD Calls;
time_t LastCall;
UBYTE CharSet;
UBYTE PageLen;
UBYTE LineLen;
UBYTE Protocol;
ULONG Flags;
ULONG AccessBits;
};
/* V1.80b Brett-Struktur */
struct AltArea
{
TEXT Name[LEN_AREANAME+1];
TEXT Info[LEN_AREAINFO+1];
TEXT MBName[LEN_MBNAME+1];
TEXT FilePath[LEN_FILEAREA+1];
UWORD ID;
UBYTE Type;
UWORD Level;
ULONG AccessBits;
ULONG WriteFlag;
ULONG EditFlag;
UBYTE Access;
UBYTE QuoteStr;
UBYTE PQuoteStr;
UBYTE ResendStr;
UBYTE ForwardStr;
UBYTE OriginStr;
UWORD HoldNum;
UWORD HoldDays;
UWORD Mother;
UWORD Daughter;
UWORD Next;
};
STRPTR Version = "\0$VER: KMSConv 1.1 ("__COMMODORE_DATE__")";
// Procedures
UWORD MyBreak(VOID)
{
return 0;
}
VOID main(UWORD argc, STRPTR *argv)
{
struct AltUserdaten altuser;
struct AltArea altarea;
struct Userdaten neuuser;
struct Area neuarea;
BOOL aconv = FALSE;
FILE *infile, *outfile;
UWORD num = 0;
onbreak(MyBreak);
if(argc < 4 || argc > 4 || !strcmp("?", argv[1]) || (strcmp("-u", argv[1]) && strcmp("-a", argv[1])))
{
printf(USAGE, argv[0], argv[0]);
exit(0);
}
if(!strcmp("-a", argv[1]))
aconv = TRUE;
if(!(infile = fopen(argv[2], "r")))
exit(20);
else if(!(outfile = fopen(argv[3], "w")))
{
fclose(infile);
exit(20);
}
else
{
if(!aconv)
{
/* KMS_UAF.DAT konvertieren */
while(fread(&altuser, 1, sizeof(struct AltUserdaten), infile))
{
clrmem(&neuuser, sizeof(neuuser));
neuuser.ID = ++num;
strcpy(neuuser.Name , altuser.Name);
strcpy(neuuser.RealName, altuser.RealName);
strcpy(neuuser.Street , altuser.Street);
strcpy(neuuser.City , altuser.City);
strcpy(neuuser.Phone , altuser.Phone);
strcpy(neuuser.Prompt , altuser.Prompt);
neuuser.Level = altuser.Level;
neuuser.Calls = altuser.Calls;
neuuser.LastCall = altuser.LastCall;
neuuser.CharSet = altuser.CharSet;
neuuser.PageLen = altuser.PageLen;
neuuser.LineLen = altuser.LineLen;
neuuser.Protocol = altuser.Protocol;
neuuser.Flags = altuser.Flags;
neuuser.AccessBits = altuser.AccessBits;
neuuser.Quota = 5;
fprintf(outfile, "%d\n%s\n%s\n%s\n", neuuser.ID,
neuuser.Name,
neuuser.RealName,
neuuser.Street);
fprintf(outfile, "%s\n%s\n%s\n", neuuser.City,
neuuser.Phone,
neuuser.Prompt);
fprintf(outfile, "%d\n%d\n%ld\n", neuuser.Level,
neuuser.Calls,
neuuser.LastCall);
fprintf(outfile, "%d\n%d\n%d\n%d\n", neuuser.CharSet,
neuuser.PageLen,
neuuser.LineLen,
neuuser.Protocol);
fprintf(outfile, "%ld\n%ld\n%d\n\n", neuuser.Flags,
neuuser.AccessBits,
neuuser.Quota);
}
}
else
{
/* KMS_AREAS.DAT konvertieren */
TEXT buff[LEN_MBNAME+2]; /* MBNAME ist laengstes Element */
while(fgets(buff, LEN_AREANAME+2, infile))
{
clrmem(&altarea, sizeof(struct AltArea));
clrmem(&neuarea, sizeof(struct Area));
if(strlen(buff))
buff[strlen(buff)-1] = '\0'; /* Linefeed am Ende entfernen */
strcpy(altarea.Name, buff);
if(fgets(buff, LEN_AREAINFO+2, infile))
{
if(strlen(buff))
buff[strlen(buff)-1] = '\0';
strcpy(altarea.Info, buff);
}
if(fgets(buff, LEN_MBNAME+2, infile))
{
if(strlen(buff))
buff[strlen(buff)-1] = '\0';
strcpy(altarea.MBName, buff);
}
if(fgets(buff, LEN_FILEAREA+2, infile))
{
if(strlen(buff))
buff[strlen(buff)-1] = '\0';
strcpy(altarea.FilePath, buff);
}
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.ID = (UWORD)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.Type = (UBYTE)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.Level = (UWORD)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.AccessBits = (ULONG)atol(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.WriteFlag = (ULONG)atol(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.EditFlag = (ULONG)atol(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.Access = (UBYTE)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.QuoteStr = (UBYTE)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.PQuoteStr = (UBYTE)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.ResendStr = (UBYTE)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.ForwardStr = (UBYTE)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.OriginStr = (UBYTE)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.HoldNum = (UWORD)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.HoldDays = (UWORD)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.Mother = (UWORD)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.Daughter = (UWORD)atoi(buff);
if(fgets(buff, LEN_NUMBER+2, infile))
altarea.Next = (UWORD)atoi(buff);
strcpy(neuarea.Name, altarea.Name);
strcpy(neuarea.Info, altarea.Info);
strcpy(neuarea.MBName, altarea.MBName);
strcpy(neuarea.FilePath, altarea.FilePath);
neuarea.ID = altarea.ID;
neuarea.Type = altarea.Type;
if(altarea.Access & AACC_READ)
neuarea.ReadLevel = (UBYTE)altarea.Level;
else
neuarea.ReadLevel = 255;
if(altarea.Access & AACC_WRITE)
neuarea.WriteLevel = (UBYTE)altarea.Level;
else
neuarea.WriteLevel = 255;
if(altarea.Access & AACC_EDIT)
neuarea.EditLevel = (UBYTE)altarea.Level;
else
neuarea.EditLevel = 255;
neuarea.AccessBits = altarea.AccessBits;
neuarea.WriteFlag = (UWORD)altarea.WriteFlag;
neuarea.QuoteStr = altarea.QuoteStr;
neuarea.PQuoteStr = altarea.PQuoteStr;
neuarea.ResendStr = altarea.ResendStr;
neuarea.ForwardStr = altarea.ForwardStr;
neuarea.OriginStr = altarea.OriginStr;
neuarea.HoldNum = altarea.HoldNum;
neuarea.HoldDays = altarea.HoldDays;
neuarea.Mother = altarea.Mother;
neuarea.Daughter = altarea.Daughter;
neuarea.Next = altarea.Next;
fprintf(outfile,"%s\n%s\n%s\n%s\n", neuarea.Name,
neuarea.Info,
neuarea.MBName,
neuarea.FilePath);
fprintf(outfile,"%d\n%d\n%d\n%d\n%d\n", neuarea.ID,
neuarea.Type,
neuarea.ReadLevel,
neuarea.WriteLevel,
neuarea.EditLevel);
fprintf(outfile,"%ld\n%d\n", neuarea.AccessBits,
neuarea.WriteFlag);
fprintf(outfile,"%d\n%d\n%d\n%d\n%d\n", neuarea.QuoteStr,
neuarea.PQuoteStr,
neuarea.ResendStr,
neuarea.ForwardStr,
neuarea.OriginStr);
fprintf(outfile,"%d\n", neuarea.HoldNum);
fprintf(outfile,"%d\n", neuarea.HoldDays);
fprintf(outfile,"%d\n%d\n%d\n", neuarea.Mother,
neuarea.Daughter,
neuarea.Next);
}
fclose(infile);
fclose(outfile);
}
}
exit(0);
}